import Assert from '@/utils/assets'
import DoubleLinkedList, { DNode } from '../doubleLinkedLinkedList';
// import { hasCycle, reverse, reverseUseIterator } from '../example';
// 测试
export const test = () => {
    const ll = new DoubleLinkedList();
    const assert = new Assert();
    assert.type('size').expect(ll.size()).toBe(0)
    assert.type('isEmpty').expect(ll.isEmpty()).toBe(true)
    assert.type('root').expect(ll.getRoot()).toBe(null)

    ll.add(1)
    ll.add(2)
    ll.add(3)
    ll.add(4)


    // print(ll)
    // ll.remove(2)
    // print(ll)


    // assert.type('get').expect(ll.get(0)!.value).toBe(1)
    // assert.type('get').expect(ll.get(1)!.value).toBe(2)

    // // print(ll)

    // ll.set(1, 3)
    // assert.type('afterSet').expect(ll.get(1)!.value).toBe(3)

    // // print(ll)

    // ll.remove(1);
    // assert.type('size').expect(ll.size()).toBe(1)
    // // print(ll)

    // assert.type('indexOf').expect(ll.indexOf(3)).toBe(0)

    // ll.add(4)
    // ll.add(5)
    // ll.add(6)

    // assert.type('size').expect(ll.size()).toBe(4)

    // ll.clear();
    // assert.type('size').expect(ll.size()).toBe(0)
    // assert.type('isEmpty').expect(ll.isEmpty()).toBe(true)
    // assert.type('root').expect(ll.getRoot()).toBe(null)
    // print(ll);
    // const newHead = reverse(ll.getRoot())
    // print(ll)
    // const newHead2 = reverseUseIterator(ll.getRoot())
    // printNode(newHead!)
    // printNode(newHead2!)
    // debugger
    // const one = ll.get(1);
    // const two = ll.get(3) as any;
    // two.next = one
    // // debugger
    // console.log(hasCycle(ll.getRoot()))

}




/**
 * 打印 doubleLinkList
 * @param ll
 */
const print = <T>(ll: DoubleLinkedList<T>) => {
    let str = '';
    ll.forEach((node) => {
        str += `${node.value} -> `
    })
    str = str.substring(0, str.length - 3)
    console.log(str)
}